#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QLabel>
#include <QCoreApplication>
#include <QNetworkInterface>
#include <QNetworkAddressEntry>
#include <QDebug>
#include <QVector>
#include <QFile>
#include <qdir.h>
#include <QPushButton>
#include <QKeyEvent>
#include <QFileDialog>
#include <QMouseEvent>
#include <QGraphicsDropShadowEffect>
#include <QtMultimedia/QMediaPlayer>
#include <QMovie>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:

    void init();

    void on_ChatPage_clicked();

    void on_filePage_clicked();


    void printHostIPAddresses(); // ip


    void on_Pquit_clicked();

    void on_start_clicked();

    void on_Psendmsg_clicked();

    void mouseMoveEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);

    void on_Pclean_clicked();

    void on_cancel_clicked();

    void on_morePage_clicked();

    void on_Usage_clicked();

    void on_Pmin_clicked();

    void on_PselectFile_clicked();

    void on_PsendFile_clicked();

    void on_play_clicked();

    void on_prev_clicked();

    void on_next_clicked();

private:
    Ui::Widget *ui;
    QTcpServer* m_s;
    QVector<QTcpSocket*> m_tcp; // 多客户端时放进数组中管理

    QString MyHost; // 本主机Ip
    QString path; // 选择文件的路径

    static int count; // 确认每个客户端的vector位置，避免转发消息给自己

    int cNum = 1; // 在线人数

    QVector<QPushButton*> PBs; // 按键数组

    QPoint dragPosition; // 鼠标移动处理坐标

    QMediaPlayer* player; // 初始化播放器

    QMovie *movie;
};

// 事件过滤器
class KeyFilter : public QObject {
    Q_OBJECT

public:
    explicit KeyFilter(QVector<QPushButton*>& PBs)
    {
        s = PBs;
        // push、clean、selfile、sendfile
    }
protected:
    bool eventFilter(QObject *obj, QEvent *event) override {
        if (event->type() == QEvent::KeyPress) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
            if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) {
                    s[0]->click(); // 触发按钮的点击事件
                    return true; // 阻止事件进一步传播,直接返回
            }
            if (keyEvent->modifiers() == Qt::ControlModifier && keyEvent->key() == Qt::Key_L) {
                // 检测到 Ctrl + L 按键组合
                s[1]->click();
                return true;
            }
            if (keyEvent->modifiers() == Qt::ControlModifier && keyEvent->key() == Qt::Key_N) {
                // 检测到 Ctrl + N 按键组合
                s[2]->click();
                return true;
            }
            if (keyEvent->modifiers() == Qt::ControlModifier && keyEvent->key() == Qt::Key_M) {
                // 检测到 Ctrl + M 按键组合
                s[3]->click();
                return true;
            }
        }
        // 对于其他事件，继续正常处理
        return QObject::eventFilter(obj, event);

    }
private:
    QVector<QPushButton*> s;
};

#endif // WIDGET_H
